﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class Pedido : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            List<Entidad.EntidadDetallePedido> pedidos = new List<Entidad.EntidadDetallePedido>();
            pedidosEnSesion = pedidos;
            cargarCDs();
            cargarProveedores();
            cd_actual.Visible = false;
            habilitar(false);
            cargarPedido();
            btnEliminar.Enabled = false;
            btnSave.Enabled = false;
            h5_pedido.Visible = false;
            pedido_actual.Visible = false;
            btnConfirmar.Enabled = false;
            alerta.InnerText = "Seleccione un Proveedor con el cual reponer los CDs.";
            exito.Visible = false;
        }
    }
    private void cargarPedido()
    {
        gvPedido.DataSource = pedidosEnSesion;
        gvPedido.DataKeyNames = new string[] { "id_cd" };
        gvPedido.DataBind();
    }
    private List<Entidad.EntidadDetallePedido> pedidosEnSesion
    {
        get
        {
            if (Session["pedidosEnSesion"] != null)
                return (List<Entidad.EntidadDetallePedido>)Session["pedidosEnSesion"];
            else
                return null;
        }
        set
        {
            Session["pedidosEnSesion"] = value;
        }
    }
    private void cargarProveedores()
    {
        cboProvedor.DataSource = DAO.DAOProveedor.getTodas();
        cboProvedor.DataTextField = "nombre";
        cboProvedor.DataValueField = "id_proveedor";
        cboProvedor.DataBind();
        cboProvedor.Items.Insert(0, new ListItem("(Sin Seleccion)", ""));
        cboProvedor.SelectedIndex = 0;
    }
    private void cargarCDs()
    {
        gvCD.DataSource = DAO.DAOCD.getCDsParaTransaccion();
        gvCD.DataKeyNames = new string[] { "id_cd" };
        gvCD.DataBind();
    }
    protected void cbo_index_change(object sender, EventArgs e)
    {
        if (cboProvedor.SelectedIndex == 0)
        {
            btnProveedor.Enabled = false;
        }
        if (cboProvedor.SelectedIndex > 0)
        {
            btnProveedor.Enabled = true;
        }
        exito.Visible = false;
    }
    protected void btn_proveedor_click(object sender, EventArgs e)
    {
        cboProvedor.Enabled = false;
        btnProveedor.Enabled = false;
        alerta.InnerText = @"Seleccione un CD e ingrese el precio y la cantidad. Haga click en ""Confirmar Pedido"" para terminar el Pedido. ";
        alerta.Attributes["class"] = "col-sm-12 alert alert-info";
    }
    protected void btn_confirmar_click(object sender, EventArgs e)
    {
        if (cboProvedor.SelectedIndex > 0 && pedidosEnSesion.Count != 0 && btnProveedor.Enabled == false)
        {
            DateTime hoy = DateTime.Now;            
            int id_proveedor = int.Parse(cboProvedor.SelectedValue);
            //guardar
            Entidad.EntidadPedido pedido = new Entidad.EntidadPedido();
            pedido.fecha = hoy;
            pedido.id_proveedor = int.Parse(cboProvedor.SelectedValue);
            pedido.setDetallesPedido(pedidosEnSesion);
            DAO.DAOPedido.guardarPedido(pedido);
            ///////////////////////////
            pedidosEnSesion = new List<Entidad.EntidadDetallePedido>();
            cboProvedor.SelectedIndex = -1;
            cboProvedor.Enabled = true;
            alerta.InnerText = "Seleccione un Proveedor con el cual reponer los CDs.";
            btnConfirmar.Enabled = false;
            btnSave.Enabled = false;
            cargarCDs();
            h5_pedido.Visible = false;
            cargarPedido();

            pedido_actual.Visible = false;
            txtPrecio.Text = "";
            txtCantidad.Text = ""; 
            btnEliminar.Enabled = false;
            alerta.Attributes["class"] = "col-sm-12 alert alert-info";
            exito.Visible = true;
        }
        else if(cboProvedor.SelectedIndex <= 0 && btnProveedor.Enabled ==false)
        {
            alerta.Attributes["class"] = "col-sm-12 alert alert-danger";
        }
    }
    protected void btn_quitar_click(object sender, EventArgs e)
    {
        int id_cd_pedido = (int)ViewState["id_cd_pedido"];
        for (int i = 0; i < pedidosEnSesion.Count; i++)
        {
            if (pedidosEnSesion.ElementAt(i).id_cd == id_cd_pedido)
            {
                gvCD.Rows[(int)pedidosEnSesion.ElementAt(i).row_index].Visible = true;
                pedidosEnSesion.RemoveAt(i);
                break;
            }
        }
        gvPedido.DataSource = pedidosEnSesion;
        gvPedido.DataKeyNames = new string[] { "id_cd" };
        gvPedido.DataBind();

        txtCantidad.Text = "";
        txtPrecio.Text = "";
        habilitar(false);
        h5_pedido.Visible = false;
        pedido_actual.Visible = false;

        btnEliminar.Enabled = false;
        if (pedidosEnSesion.Count != 0)
        {
            btnConfirmar.Enabled = true;
        }
        else
        {
            btnConfirmar.Enabled = false;
        }
        exito.Visible = false;

    }
    protected void btn_guardar_click(object sender, EventArgs e)
    {
        if (ViewState["id_cd"] != null)
        {
            Entidad.EntidadDetallePedido dp = new Entidad.EntidadDetallePedido();
            dp.cantidad = int.Parse(txtCantidad.Text.ToString());
            //pasa el precio a float
            dp.precio = float.Parse(txtPrecio.Text.ToString(), System.Globalization.CultureInfo.InvariantCulture);
            dp.id_cd = (int)ViewState["id_cd"];
            Entidad.EntidadCD cd = DAO.DAOCD.Buscar((int)dp.id_cd);
            dp.codigo_cd = cd.codigo_cd;
            dp.titulo = cd.titulo;
            dp.row_index = (int)ViewState["row_index"];
            pedidosEnSesion.Add(dp);
            if (ViewState["row_index"] != null)
            {
                gvCD.Rows[(int)ViewState["row_index"]].Visible = false;
                ViewState["row_index"] = null;
            }
            gvPedido.DataSource = pedidosEnSesion;
            gvPedido.DataKeyNames = new string[] { "id_cd" };
            gvPedido.DataBind();

            txtCantidad.Text = "";
            txtPrecio.Text = "";
            cd_actual.Visible = false;
            habilitar(false);
            h5_pedido.Visible = true;

            ViewState["id_cd"] = null;
            btnSave.Enabled = false;
        }
        else if (ViewState["id_cd_pedido"] != null)
        {

            int id_cd_pedido = (int)ViewState["id_cd_pedido"];
            foreach (Entidad.EntidadDetallePedido item in pedidosEnSesion)
            {
                if (item.id_cd == id_cd_pedido)
                {
                    item.cantidad = int.Parse(txtCantidad.Text.ToString());
                    //guarda el precio...
                    item.precio = float.Parse(txtPrecio.Text.ToString(), System.Globalization.CultureInfo.InvariantCulture);
                    break;
                }
            }
            gvPedido.DataSource = pedidosEnSesion;
            gvPedido.DataKeyNames = new string[] { "id_cd" };
            gvPedido.DataBind();
            txtCantidad.Text = "";
            txtPrecio.Text = "";
            pedido_actual.Visible = false;
            habilitar(false);
            h5_pedido.Visible = true;
        }
        if (pedidosEnSesion.Count != 0)
        {
            btnConfirmar.Enabled = true;
        }
        exito.Visible = false;
    }
    protected void gvCD_SelectedIndexChanged(object sender, EventArgs e)
    {
        ViewState["row_index"] = gvCD.SelectedIndex;
        int cdId = (int)gvCD.SelectedDataKey.Value;
        Entidad.EntidadCD cd = DAO.DAOCD.Buscar(cdId);
        cd_actual.Visible = true;
        cd_actual.InnerText = "Usted selecciono el CD Codigo: " + cd.codigo_cd + " Titulo: " + cd.titulo;
        ViewState["id_cd"] = cdId;
        habilitar(true);
        btnSave.Enabled = true;
        pedido_actual.Visible = false;
        txtCantidad.Text = "";
        txtPrecio.Text = "";
        btnEliminar.Enabled = false;
        exito.Visible = false;
    }
    protected void gvPedido_SelectedIndexChanged(object sender, EventArgs e)
    {
        cd_actual.Visible = false;
        int id_cd_pedido = (int)gvPedido.SelectedDataKey.Value;
        Entidad.EntidadCD cd = DAO.DAOCD.Buscar(id_cd_pedido);
        pedido_actual.Visible = true;
        pedido_actual.InnerText = "Usted selecciono el CD Codigo: " + cd.codigo_cd + " Titulo: " + cd.titulo;
        ViewState["id_cd_pedido"] = id_cd_pedido;
        habilitar(true);
        btnSave.Enabled = true;
        btnEliminar.Enabled = true;
        foreach (Entidad.EntidadDetallePedido item in pedidosEnSesion)
        {
            if (item.id_cd == id_cd_pedido)
            {
                txtCantidad.Text = item.cantidad.ToString();
                //carga el precio al textbox
                txtPrecio.Text = item.precio.ToString().Replace(",",".");
                break;
            }
        }
        exito.Visible = false;
        ViewState["id_cd"] = null;
        //int cdId = (int)gvCD.SelectedDataKey.Value;
        // editarCD(cdId);
    }
    private void habilitar(bool f)
    {

        txtPrecio.Enabled = f;
        txtCantidad.Enabled = f;
    }
}